package simco.framework.gui.graph.base;

import simco.framework.gui.graph.iface.Drawable;
import simco.framework.gui.graph.iface.Selectable;

/**
 * Tato trida definuje zakladni graficke primitivum, od ktereho dedi
 * vsechny objekty vykreslovane na platno. 
 * 
 * @author Matej Prokop, mythge@students.zcu.cz
 */
public abstract class GraphPrimitive implements Selectable, Drawable
{
	/**
	 * Identifikator objektu
	 */
    private long id;

    /**
     * Indikuje je-li objekt vidieltny
     */
    private boolean visible;
    
    /**
     * Indikuje je-li objekt vybrany (oznaceny) uzivatelem
     */
    private boolean selected;

    /**
     * Indikuje je-li specilane oznacen (Pozn: slouzi pro
     * zvyrazneni objektu, pouzitych pri poslenim 
     * simulacnim kroku)
     */
    private boolean marked;
    
    /**
     * Vytvori nove graficke primitivum
     * @param id identifikator objektu
     */
    public GraphPrimitive(long id) 
    {
        this.id = id;
        visible = false;
        selected = false;
        marked = false;
    }

    /**
     * Vraci logickou hodnotu zda-li je objekt viditelny
     */
    public boolean isVisible() 
    {
        return this.visible;
    }

    /**
     * Nastavuje zda-li je objekt viditelny
     * @param newValue logicka hodnota 
     */
    public void setVisibility(boolean newValue) 
    {
        this.visible = newValue;
    }

    /**
     * Vraci logickou hodnotu zda-li je objekt vybrany uzivatelem
     */
    public boolean isSelected() 
    {
        return selected;
    }

    /**
	 * Nastavuje zda-li je objekt vybrany uzivateleme.
	 * @param newValue logicka hodnota
     */
    public void setSelected(boolean newValue) 
    {
        this.selected = newValue;
    }

    /**
     * Vraci identifikator objektu
     * @return identifikator objektu
     */
    public long getId()
    {
        return this.id;
    }

    /**
     * Vraci logickou hodnotu zda-li byl objekt zainteresovany
     * v poslednim kroku simulace.
     * @return
     */
	public boolean isMarked() 
	{
		return marked;
	}

	/**
	 * Nastavuje zda-li byl objekt zainteresovany
     * v poslednim kroku simulace.
	 * 
	 * @param marked logicka hodnota
	 */
	public void setMarked(boolean marked) 
	{
		this.marked = marked;
	}
}
